package de.hdu.pms.dao;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import org.apache.log4j.Logger;
import org.junit.Test;

import de.hdu.pms.model.Feiertage;

public class FeiertageDaoTest extends AbstractDataAccessTest {

	public static Logger Log = Logger.getLogger(FeiertageDaoTest.class);

	public static void setLog(Logger log) {
		Log = log;

	}

	private FeiertageDao feiertageDao = null;
	private String tableName = "feiertage";

	public void setFeiertageDao(FeiertageDao feiertageDao) {
		this.feiertageDao = feiertageDao;
	}

	@Test
	public void testFindById() {
		Log.info("UnitTest - Feiertage - FindById");
		Feiertage feiertage = new Feiertage();
		Calendar calendar = new GregorianCalendar();
		calendar.set(Calendar.DATE, 1);
		calendar.set(Calendar.MONTH, 0);
		calendar.set(Calendar.YEAR, 2011);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		feiertage.setId(calendar.getTime());
		feiertage.setFtag_bez("FindById");
		feiertageDao.save(feiertage);
		Feiertage found = feiertageDao.findById(calendar.getTime());
		Log.info("found: " + found.getFtag_bez());
		assertEquals("FindById", found.getFtag_bez());

	}

	@SuppressWarnings("deprecation")
	@Test
	public void testFindAll() {
		Log.info("UnitTest - Feiertage - FindAll");
		String[] tables = { tableName };
		deleteFromTables(tables);
		Feiertage feiertage = new Feiertage();
		Calendar calendar = new GregorianCalendar();
		calendar.set(Calendar.DATE, 1);
		calendar.set(Calendar.MONTH, 0);
		calendar.set(Calendar.YEAR, 2011);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		feiertage.setId(calendar.getTime());
		feiertage.setFtag_bez("FindAll");
		feiertageDao.save(feiertage);
		List<Feiertage> alle = feiertageDao.findAll();
		int rows = countRowsInTable(tableName);
		assertEquals("Es darf nur eine Zeile vorhaden sein", alle.size(), rows);
		deleteFromTables(tables);
	}

	@SuppressWarnings("deprecation")
	@Test
	public void testSave() {
		Log.info("UnitTest - Feiertage - Save");
		String[] tables = { tableName };
		deleteFromTables(tables);
		Feiertage feiertage = new Feiertage();
		Calendar calendar = new GregorianCalendar();
		calendar.set(Calendar.DATE, 1);
		calendar.set(Calendar.MONTH, 0);
		calendar.set(Calendar.YEAR, 2011);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		feiertage.setId(calendar.getTime());
		feiertage.setFtag_bez("Save");
		feiertageDao.save(feiertage);
		feiertageDao.findAll(); // Um Threading zu verhindern, da sonst
								// countRows bevor wirklicher Insert
		int rows = countRowsInTable(tableName);
		assertEquals("Es darf nur eine Zeile vorhanden sein: ", 1, rows);
	}

	@SuppressWarnings("deprecation")
	@Test
	public void testDelete() {
		Log.info("UnitTest - Feiertage - Delete");
		String[] tables = { tableName };
		deleteFromTables(tables);
		Feiertage feiertage = new Feiertage();
		Calendar calendar = new GregorianCalendar();
		calendar.set(Calendar.DATE, 1);
		calendar.set(Calendar.MONTH, 0);
		calendar.set(Calendar.YEAR, 2011);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		feiertage.setId(calendar.getTime());
		feiertage.setFtag_bez("Delete");
		feiertageDao.save(feiertage);
		try {
			feiertageDao.delete(feiertage);
		} catch (Exception e) {
			Log.info("Exception: " + e.getMessage());
		}
		int rows = countRowsInTable(tableName);
		assertEquals(0, rows);

	}

}
